package com.nextel.project.cobranza.rms;
import com.nextel.project.cobranza.bean.PagoBean;
import com.nextel.project.util.BuscarListener;
import pe.com.nextel.rms.GestorRMS;
import pe.com.nextel.rms.Persistente;
import pe.com.nextel.rms.RMSIndice;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStoreException;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Iterator;
import pe.com.nextel.util.List;

/**
 *
 * @author eespinoza
 */
public class RMSPago extends GestorRMS {
    
    private RMSIndice indRMSPago;
    
    public RMSPago() {
        super("RMS_PAGO");
        indRMSPago = new RMSIndice("IDX_PAGO");
    }
    
    protected Persistente createObjectBean() {
        return new PagoBean();
    }
    
    
    
    public void eliminar() throws RecordStoreException{
        deleteAll();
        indRMSPago.deleteAll();
    }
    
    public void grabarPago(PagoBean pago) throws Exception {
        
        try {
            abrirRS();
            indRMSPago.abrirIndice();
            guardar(pago);

            indRMSPago.guardarIndice(pago.getTipoPago());

        } finally {
            indRMSPago.cerrarIndice();
            cerrarRS();
        }
    }
    
    public synchronized void getlistarPagos(BuscarListener listener) throws Exception {
        //#debug
//        System.out.println("rms.buscarPorNombreClientes");
        RecordEnumeration en = null;
        try {
            
            abrirRS();
            
            en = enumerateRecords();
            
            List lista = new ArrayList();
            int i = 0;
          
            while (en.hasNextElement() && !listener.esFinalizadaBusqueda()) {
//                System.out.println("inicando");
                int id = en.nextRecordId();
                
                PagoBean bean = (PagoBean) getRecordObject(id);
                
                lista.add(bean);
                
                if ((i % 10 == 0) && !lista.isEmpty()) {
                    listener.agregarElementosVectorDatos(lista);
                    lista.clear();
                    System.gc();
                }
                
            }
            
            if (!lista.isEmpty() && !listener.esFinalizadaBusqueda()) {
                listener.agregarElementosVectorDatos(lista);
                lista.clear();
                System.gc();
            }
            
            if (listener != null) {
                listener.finalizo();
            }
            
            lista = null;
            System.gc();
            
        } finally {
            if (en != null) {
                en.destroy();
                en = null;
            }
            cerrarRS();
        }
    }
    
    /**
     * Lista las cobranzas de acuerdo al tipo de pago
     * @param tipoPago
     * @param listener
     * @throws java.lang.Exception
     */
    public synchronized void getlistarPagos(String tipoPago, BuscarListener listener) throws Exception {
        //#debug
//        System.out.println("rms.buscarPorNombreClientes");
        
        try {
            
            abrirRS();
            indRMSPago.abrirIndice();
            
            
            List listaIndices = indRMSPago.getIndiceMultiple(tipoPago);
            
            List lista = new ArrayList();
            int i = 0;
            
            Iterator itx = listaIndices.iterator();
            
            while (itx.hasNext() && !listener.esFinalizadaBusqueda()) {
                
                
                PagoBean bean = (PagoBean) getRecordObject(((Integer) itx.next()).intValue());
                
                
                lista.add(bean);
                
                if ((i % 10 == 0) && !lista.isEmpty()) {
                    listener.agregarElementosVectorDatos(lista);
                    lista.clear();
                    System.gc();
                }
                
            }
            
            if (!lista.isEmpty() && !listener.esFinalizadaBusqueda()) {
                listener.agregarElementosVectorDatos(lista);
                lista.clear();
                System.gc();
            }
            
            if (listener != null) {
                listener.finalizo();
            }
            
            
            System.gc();
            
        } finally {
            
            indRMSPago.cerrarIndice();
            
            cerrarRS();
        }
    }
    
//    public void actualizarPago() throws Exception {
//        RecordEnumeration en = null;
//        try {
//            abrirRS();
//     
//            en = enumerateRecords();
//     
//            while (en.hasNextElement()) {
//     
//                int id = en.nextRecordId();
//     
//                PagoBean bean = (PagoBean) getRecordObject(id);
//                bean.setIsEnviado(ControlCobranza.getInstance().ITEM_ENVIADO);
//                guardar(bean);
//     
//            }
//     
//     
//            System.gc();
//     
//        } finally {
//            if (en != null) {
//                en.destroy();
//                en = null;
//            }
//            cerrarRS();
//        }
//    }
    
    
}
